package com.gzxx.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gzxx.domain.base.BaseVo;
import com.gzxx.domain.bo.SysUserBO;
import com.gzxx.domain.vo.SysUserVo;
import com.gzxx.security.CurrentUser;
import com.gzxx.util.ServerResponse;

import java.util.List;

/**
 * @author MAX
 * @date @date 2020/7/23 9:57 上午
 * 系统用户业务接口
 */
public interface SysUserService {

    /**
     * 系统用户信息分页查询
     */
    IPage<SysUserVo> users(SysUserBO sysUserBO);

    /**
     * 根据账号查询系统用户
     *
     * @param userName
     * @return
     */
    CurrentUser loadByUserName(String userName);


    /**
     * 单个用户明细
     *
     * @param id 唯一标识
     * @return SysUserVo
     */
    SysUserVo singleDetail(Long id);

    /**
     * 新增
     *
     * @param sysUserBO 业务实体
     * @return 执行结果
     */
    ServerResponse add(SysUserBO sysUserBO);

    /**
     * 更新
     *
     * @param sysUserBO 业务实体
     * @return 执行结果
     */
    boolean update(SysUserBO sysUserBO);

    /**
     * 初始化密码
     */
    boolean initPwd(SysUserBO sysUserBO);

    /**
     * 变更用户状态
     */
    boolean changeStatus(SysUserBO sysUserBO);

    /**
     * 删除
     *
     * @param id 唯一表示
     * @return 执行结果
     */
    boolean delete(List<Long> id);

    /**
     * 修改密码
     *
     * @param sysUserBO 业务实体
     * @return 执行结果
     */
    boolean changePwd(SysUserBO sysUserBO);

    /**
     * 批量获取
     */
    List<SysUserVo> getByIds(List<Long> ids);

    /**
     * 根据用户获取用户二级部门信息
     */
    List<BaseVo> getSecondDeptUserTreeAndIds(List<Long> ids);

    /**
     * 获取所有用户
     */
    List<BaseVo> getAll();

    /**
     * 获取用户类型
     * @return
     */
    ServerResponse userType();
}
